//
//  ZJHomeTableViewController.swift
//  Webo
//
//  Created by 曾静 on 16/6/25.
//  Copyright © 2016年 qq. All rights reserved.
//

import UIKit

private let homeId:String = "home"

class ZJHomeTableViewController: ZJBaseVisiorTableViewController {

    
    let refresh:ZJRefresh = ZJRefresh()
    //因为以后经常要对数组进行计算,使用可选类型,经常进行判断,所以我们开始的时候进行了初始化
    private var dataArray:[ZJStatues] = [ZJStatues]()
    
  
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if isLogin1{
            
            setupUI()
            
           getUserInfo(activityView.isAnimating())
            
        }else{
   
            visitorView?.setVisorViewInfo(nil, desTitle: nil)
            
            view = visitorView
        }

    }
    
    func setupUI(){
        
       
        
        self.tableView.registerClass(ZJStatuesCell.self, forCellReuseIdentifier: homeId)
        
        self.tableView.rowHeight = UITableViewAutomaticDimension;
        
        self.tableView.estimatedRowHeight = 200
        
        self.tableView.tableFooterView = activityView
        
   
        
//        self.tableView.tableHeaderView = ZJRefresh
        self.tableView.addSubview(refresh)
        
       refresh.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        
        self.tableView.separatorStyle = .None
    
    }
    
    func refreshAction(){
        
        getUserInfo(self.activityView.isAnimating())
        
        //恢复refresh的位置
//        self.refresh.endRefreshing()
        
    }

    //懒加载控件,要看见动画还要开启动画
    private lazy var activityView :UIActivityIndicatorView = {
        
        let ac = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        ac.color = ThemeColor
        
        return ac
        
    }()

}
extension ZJHomeTableViewController{
    
   
    
    func getUserInfo(isPullUp:Bool){
        
        //网络请求的两个参数,默认都为0
        var sinceId:Int64 = 0//0的话是上拉加载更多
        
        var maxId:Int64 = 0//0的话是下拉刷新
        
        //如果是上啦加载更多
        if isPullUp {
            //sinceId:Int64 = 0  
            maxId = self.dataArray.last?.id ?? 0
            
            if maxId > 0 {
                
                maxId -= 1
            }
            
            
        }else{
            //如果是下拉刷新
            //maxId:Int64 = 0
            
            sinceId = self.dataArray.first?.id ?? 0
            
        }
        
      
        
          //如果是程序第一次进来,数组默认为空,所以两个参数的值都是0,默认进行原始数据的加载
        ZJNetWorkTools.shareTools.getHomeData(sinceId, maxId: maxId, callBack: { (response, error) -> () in
        
           
            
            if error != nil {
                
                print("网络请求失败")
                
                return
            }
            
            guard let res = response?["statuses"] as?[[String:AnyObject]] else{
                
                return
            }
            
            
            var marr:[ZJStatues] = [ZJStatues]()
            
            for dict in res {
                
                let ss:ZJStatues = ZJStatues(dict: dict)
                
                marr.append(ss)
                
            }
            
            //对自己的数组进行拼接.
            if isPullUp{//sinceId:Int64 = 0上拉刷新
                
                self.dataArray = self.dataArray + marr
                
            }else{//maxId:Int64 = 0下拉加载更多
                
                self.dataArray = marr + self.dataArray
                
                
            }
           //如果是程序第一次进来,数组默认为空,默认又是原始数据的加载,所以拼接好的数组即使原始数据的数组
          
            self.tableView.reloadData()
            self.activityView.stopAnimating()
            self.refresh.endRefreshing()

            
            })
    }


}

//滚动时显示cell的方法,动态进行调用

extension ZJHomeTableViewController{
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        //如果是左后一个cell
        if (indexPath.row == self.dataArray.count - 1) && !activityView.isAnimating(){
            
             activityView.startAnimating()
            
            
            //进行数据的请求,刷新UI
            
            getUserInfo(activityView.isAnimating())
            
        }
    }
    
}
extension ZJHomeTableViewController {
    
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.dataArray.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        
        let cell = tableView.dequeueReusableCellWithIdentifier(homeId, forIndexPath: indexPath) as! ZJStatuesCell
        
        cell.status = self.dataArray[indexPath.row]
        
        
        return cell
    }
    
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        
        tableView.deselectRowAtIndexPath(indexPath, animated: false)
    }
}